/***
 *
 *
 *                                                    __----~~~~~~~~~~~------___
 *                                   .  .   ~~//====......          __--~ ~~
 *                   -.            \_|//     |||\\  ~~~~~~::::... /~
 *                ___-==_       _-~o~  \/    |||  \\            _/~~-
 *        __---~~~.==~||\=_    -_--~/_-~|-   |\\   \\        _/~
 *    _-~~     .=~    |  \\-_    '-~7  /-   /  ||    \      /
 *  .~       .~       |   \\ -_    /  /-   /   ||      \   /
 * /  ____  /         |     \\ ~-_/  /|- _/   .||       \ /
 * |~~    ~~|--~~~~--_ \     ~==-/   | \~--===~~        .\
 *          '         ~-|      /|    |-~\~~       __--~~
 *                      |-~~-_/ |    |   ~\_   _-~            /\
 *                           /  \     \__   \/~                \__
 *                       _--~ _/ | .-~~____--~-/                  ~~==.
 *                      ((->/~   '.|||' -_|    ~~-/ ,              . _||
 *                                 -_     ~\      ~~---l__i__i__i--~~_/
 *                                 _-~-__   ~)  \--______________--~~
 *                               //.-~~~-~_--~- |-------~~~~~~~~
 *                                      //.-~~~--\
 *                               神兽保佑
 *                              代码无BUG!
 */
package com.qfedu.tantu.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.qfedu.tantu.bo.PayBo;
import com.qfedu.tantu.dao.PayDao;
import com.qfedu.tantu.entity.Pay;
import com.qfedu.tantu.service.intf.PayService;
import com.qfedu.tantu.util.AliPayUtils;
import com.qfedu.tantu.util.StringUtil;
import com.qfedu.tantu.vo.R;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Random;
@Service
public class PayServiceImpl implements PayService {
    @Resource
    private PayDao dao;
    @Override
    public R createPay(PayBo bo) {
        if (bo!=null){
            //1.生成订单号
            String no=createNo(bo.getOid());
            //2.构建支付对象
            AliPayUtils.AliPay pay = new AliPayUtils.AliPay(no, bo.getMoney(), bo.getTitle());
            //发起支付
            String content = AliPayUtils.createPay(pay);
            System.out.println("==================>"+content);
            if (StringUtil.isNotEmpty(content)){
                //创建支付成功
                Pay obj = new Pay(bo.getOid(), bo.getType(), 1, bo.getMoney(), no);
               //存储到数据库
                dao.insert(obj);
                return R.ok(content);
            }
        }
        return R.fail("网络异常！");
    }

    @Override
    public R queryPay(int oid, int type) {
        if (oid>0){
            Pay pay = dao.selectOne(new QueryWrapper<Pay>().eq("oid", oid));
            if (pay!=null){
                //4.如果支付信息为 未支付，那么需要请求第三方支付
                if(pay.getFlag()==1){
                    //5.请求支付宝 查询支付状态
                    String r=AliPayUtils.queryPay(pay.getNo());
                    if(StringUtil.isNotEmpty(r)) {
                        switch (r) {
                            case "TRADE_CLOSED"://订单关闭
                                pay.setFlag(3);
                                break;
                            case "TRADE_SUCCESS"://交易成功
                                pay.setFlag(2);
                                break;
                            case "TRADE_FINISHED"://交易完成
                                pay.setFlag(4);
                                break;
                        }
                        //更新支付状态
                        dao.updateById(pay);
                    }
                }
                return R.ok(pay);
            }
        }
        return R.fail("网络异常");
    }

    @Override
    public R queryAll() {
        return R.ok(dao.selectList(null));
    }
    private String createNo(int oid){
        return System.currentTimeMillis()+"_"+oid+"_"+new Random().nextInt(1000);
    }
}